/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.nys.conci.usuario.bean;

import com.nys.conci.base.BeanBase;
import com.nys.conci.base.componentes.seguridad.ReporteControlador;
import com.nys.conci.base.excepcion.ExcepcionManager;
import com.nys.conci.base.servicio.ServicioGeneral;
import com.nys.conci.base.utilitario.EtiquetasUtil;
import com.nys.conci.base.utilitario.MensajeUtil;
import com.nys.conci.cliente.entidad.Persona;
import com.nys.conci.usuario.entidad.EstadoUsuario;
import com.nys.conci.usuario.servicio.ServicioAdministracion;
import com.nys.conci.usuario.servicio.ServicioControlUsuario;
import com.sun.org.apache.xerces.internal.impl.dv.util.Base64;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.inject.Inject;
import javax.servlet.http.HttpServletRequest;

/**
 *
 * @author Yeudy10
 */
@ManagedBean
@ViewScoped
public class BeanConsultaUsuarios extends BeanBase {

    //<<<<<<<<<<<<<<<<<<<<<<<<<<<<*******************<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    //<<<<<<<<<<<<<<<<<<<<<<<<<<<<     VARIABLES     >>>>>>>>>>>>>>>>>>>>>>>>>>>>
    //<<<<<<<<<<<<<<<<<<<<<<<<<<<<*******************<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    @Inject
    private ServicioControlUsuario scu;
    @Inject
    private ServicioAdministracion sa;
    @Inject
    private ServicioGeneral sg;
    private ReporteControlador rc;
    private List<EstadoUsuario> lista_estados;
    private List<Persona> lista_usuarios;
    private Integer estado;
    private String tipo;
    private boolean hab_imp;
    private volatile String archivoStringPDF;

//<<<<<<<<<<<<<<<<<<<<<<<<<<<<*******************<<<<<<<<<<<<<<<<<<<<<<<<<<<<
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<  INICIALIZARORES  >>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<*******************<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    /**
     * Constructor
     */
    public BeanConsultaUsuarios() {
        this.inicializar();
    }

    /**
     * Inicializa las variables del bean, al acceder al constructor
     */
    private void inicializar() {
        try {
            hab_imp = false;
        } catch (Exception ex) {
            ExcepcionManager.manejarExcepcion(ex);
        }
    }

    /**
     * Inicializas las variables y atributos del bean, despues del llamado del
     * constructor. Es utilizado para las inicializaciones que utilicen datos de
     * objetos injectados.
     */
    @Override
    @PostConstruct
    public void inicializarPost() {
        cargarEstadoUsuarios();

    }
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<*******************<<<<<<<<<<<<<<<<<<<<<<<<<<<<
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<      MÉTODOS      >>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<*******************<<<<<<<<<<<<<<<<<<<<<<<<<<<<  

    public void cargarEstadoUsuarios() {
        try {
            setLista_estados(new ArrayList<EstadoUsuario>());
            setLista_estados(sa.consultarListaEstadoUsuarios());
        } catch (Exception ex) {
            ExcepcionManager.manejarExcepcion(ex);
        }
    }

    public void cargarUsuarios() {
        try {
            lista_usuarios = new ArrayList<Persona>();
            if (getTipo() == null && estado == null) {
                lista_usuarios = scu.consultarPersonas("U");
            } else {
                lista_usuarios = scu.consultarPersonas(getTipo(), estado);
            }
            
            if ((tipo != null && !tipo.trim().isEmpty()) || (estado != null && estado != 0)) {
                hab_imp = true;
            } else {
                hab_imp = false;
            }
        } catch (Exception ex) {
            ExcepcionManager.manejarExcepcion(ex);
        }
    }

    public void limpiar() {
        lista_usuarios = new ArrayList<Persona>();
        setTipo(null);
        estado = null;
        archivoStringPDF = null;
        cargarUsuarios();
    }

    /**
     * Metodo que genera el reporte a partir del elemento seleccionado en la
     * lista
     */
    public void imprimir() {
        try {
            byte[] archivoPDF;
            HashMap hashMap;
            //Enviar a imprimir
            if (estado != null && tipo == null) {

                hashMap = new HashMap();
                hashMap.put("P_ESTADO", estado);
                rc.setImprimir(true);
                archivoPDF = rc.generarReporteDirecto(ReporteControlador.Plantilla.REPORTE_LISTADO_USUARIOS,
                        hashMap, sg.retornarConexionReporte());
                archivoStringPDF = Base64.encode(archivoPDF);

            } else if (estado == null && tipo != null) {

                hashMap = new HashMap();
                hashMap.put("P_TIPO", tipo);
                rc.setImprimir(true);
                archivoPDF = rc.generarReporteDirecto(ReporteControlador.Plantilla.REPORTE_LISTADO_USUARIOS,
                        hashMap, sg.retornarConexionReporte());
                archivoStringPDF = Base64.encode(archivoPDF);

            } else {
                hashMap = new HashMap();
                hashMap.put("P_TIPO", tipo);
                hashMap.put("P_ESTADO", estado);
                rc.setImprimir(true);
                archivoPDF = rc.generarReporteDirecto(ReporteControlador.Plantilla.REPORTE_LISTADO_USUARIOS,
                        hashMap, sg.retornarConexionReporte());
                archivoStringPDF = Base64.encode(archivoPDF);

            }

            HttpServletRequest httpServletRequest = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
            httpServletRequest.setAttribute("token", "1");
            MensajeUtil.agregarMensajeInfo(EtiquetasUtil.obtenerMensaje("certificacion.01"));

        } catch (Exception ex) {
            ExcepcionManager.manejarExcepcion(ex);
        }
    }

    public void restaurar() {
        archivoStringPDF = null;
    }

    public boolean isToken() {
        FacesContext context = FacesContext.getCurrentInstance();
        HttpServletRequest httpServletRequest = (HttpServletRequest) context.getExternalContext().getRequest();
        Object object = httpServletRequest.getAttribute("token");
        if (object != null) {
            if (object.equals("1")) {
                return true;
            }
        }
        return false;
    }

    public boolean isToken2() {
        HttpServletRequest httpServletRequest = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
        Object object = httpServletRequest.getAttribute("token");
        if (object != null) {
            if (object.equals("1")) {
                httpServletRequest.setAttribute("token", "0");
                return true;
            }
        }
        return false;
    }

//<<<<<<<<<<<<<<<<<<<<<<<<<<<<*******************<<<<<<<<<<<<<<<<<<<<<<<<<<<<
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<      GET & SET      >>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<*******************<<<<<<<<<<<<<<<<<<<<<<<<<<<<    
    /**
     * @return the estado
     */
    public Integer getEstado() {
        return estado;
    }

    /**
     * @param estado the estado to set
     */
    public void setEstado(Integer estado) {
        this.estado = estado;
    }

    /**
     * @return the lista_usuarios
     */
    public List<Persona> getLista_usuarios() {
        return lista_usuarios;
    }

    /**
     * @param lista_usuarios the lista_usuarios to set
     */
    public void setLista_usuarios(List<Persona> lista_usuarios) {
        this.lista_usuarios = lista_usuarios;
    }

    /**
     * @return the lista_estados
     */
    public List<EstadoUsuario> getLista_estados() {
        return lista_estados;
    }

    /**
     * @param lista_estados the lista_estados to set
     */
    public void setLista_estados(List<EstadoUsuario> lista_estados) {
        this.lista_estados = lista_estados;
    }

    /**
     * @return the tipo
     */
    public String getTipo() {
        return tipo;
    }

    /**
     * @param tipo the tipo to set
     */
    public void setTipo(String tipo) {
        this.tipo = tipo;
    }

    /**
     * @return the hab_imp
     */
    public boolean isHab_imp() {
        return hab_imp;
    }

    /**
     * @param hab_imp the hab_imp to set
     */
    public void setHab_imp(boolean hab_imp) {
        this.hab_imp = hab_imp;
    }
}
